package com.hugang.juc.security;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 集合类线程不安全问题示例
 *
 * 1.  问题现象
 *     没有出现本该出现的结果，即本来是指定的三个结果，但是只出现了一个或者两个；
 *     java.util.ConcurrentModificationException
 * 2.  出现原因
 * 3.  解决方案
 *     -   使用Vector（不推荐）
 *     -   使用Collections.synchronizedList(new ArrayList<>())方法将不安全的集合类对象转换为安全的集合类对象
 *     -   使用CopyOnWriteArrayList
 *
 * @author hg
 * @date 2020/8/20 09:20
 */
public class NotSafeDemo {

    public static void main(String[] args) {
//        Map list = new ConcurrentHashMap();
//        List list = new ArrayList<>();
        List list = new CopyOnWriteArrayList();
//        Set list = new HashSet();
        for (int i = 0; i < 30; i++) {
//            try {
//                TimeUnit.SECONDS.sleep(1);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
            new Thread(()->{
                String uuid = UUID.randomUUID().toString().substring(0, 8);
//                list.put(uuid,uuid);
                list.add(uuid);

                System.out.println(Thread.currentThread().getName() + " ---> " +list + uuid);

            },String.valueOf(i)).start();
        }

//        ArrayList<Integer> list = new ArrayList<Integer>();
//        list.add(2);
//        Iterator<Integer> iterator = list.iterator();
//        while(iterator.hasNext()){
//            Integer integer = iterator.next();
//            if(integer==2)
//                list.remove(integer);
//        }
    }
}
